#include "../../include/server_handle.h"

/***************************************************
函数名:server_admin_kick
功能:处理管理员踢人功能
传入参数:struct message *a, clientinf *clientNode
返回值:成功返回踢出客户端的fd，否则返回0
***************************************************/
int server_admin_kick(struct message *a, clientinf *clientNode)
{
    int closefd;
	datatype e;
	my_strcpy(e.name,(*a).msg);
	LinkList L;
	L = (LinkList)findlist(clientlink,e);
	if(L == NULL)
	{
		my_strcpy((*a).flag,"sermsg");
		sprintf((*a).msg,"该用户不在线\n");
		my_send((*clientNode).decr,a,sizeof(struct message),0);
		return 0;
	}
	else
	{
	        closefd=L->data.decr;
		my_close(closefd);
		deletelist(clientlink,e);
		L = clientlink;
		L = L->next;
		my_strcpy((*a).flag,"sermsg");
		sprintf((*a).msg,"%s 被管理员踢出了聊天室!",(*a).msg);
		while(L != NULL)
		{
			my_send(L->data.decr,a,sizeof(struct message),0);
			L = L->next;
		}
	}   
	return closefd;
}

/***************************************************
函数名:server_admin_screen
功能:处理管理员禁言功能
传入参数:struct message *a, clientinf *clientNode
返回值:成功返回1，否则返回0
***************************************************/
int server_admin_screen(struct message *a, clientinf *clientNode)
{
	datatype e;
	my_strcpy(e.name,(*a).msg);
	LinkList L;
	L = (LinkList)findlist(clientlink,e);
	if(L == NULL)
	{
		 my_strcpy((*a).flag,"sermsg");
 	         sprintf((*a).msg,"该用户不在线\n");
		 my_send((*clientNode).decr,a,sizeof(struct message),0);
		 return 0;
	}
	else
	{
        	L->data.speak = (L->data.speak+1)%2;
	    	my_strcpy((*a).flag,"sermsg");
		if(L->data.speak == 0)
		{
		        sprintf((*a).msg,"%s 被管理员禁言了!",(*a).msg);
		}
	    	else
		{
			sprintf((*a).msg,"%s 被管理员解禁!",(*a).msg);
		}
		L = clientlink;
	    	L = L->next;
		while(L != NULL)
		{
	       		 my_send(L->data.decr,a,sizeof(struct message),0);
			L = L->next;
		}
	}
	return 1;
}

